import { ss } from '@/utils/storage'

export interface SunoMedia {
  id: string
  video_url: string
  audio_url: string
  image_url: string
  image_large_url: string
  is_video_pending: boolean
  major_model_version: string
  model_name: string
  metadata: {
    tags?: string
    prompt: string
    gpt_description_prompt?: string
    audio_prompt_id?: string
    history?: string
    concat_history?: string
    type: string
    duration: number
    refund_credits: boolean
    stream: boolean
    error_type?: string
    error_message?: string
  }
  is_liked: boolean
  user_id: string
  display_name: string
  handle: string
  is_handle_updated: boolean
  is_trashed: boolean
  reaction?: any // You might want to define a proper type for this
  created_at: string
  status: string
  title: string
  play_count: number
  upvote_count: number
  is_public: boolean
}
export class sunoStore {
  // private id: string;
  private localKey = 'suno-store'
  public save(obj: SunoMedia) {
    if (!obj.id)
      throw 'id must'
    const arr = this.getObjs()
    const i = arr.findIndex(v => v.id == obj.id)
    if (i > -1)
      arr[i] = obj
    else arr.push(obj)
    ss.set(this.localKey, arr)
    return this
  }

  public findIndex(id: string) {
    return this.getObjs().findIndex(v => v.id == id)
  }

  public getObjs(): SunoMedia[] {
    const obj = ss.get(this.localKey) as undefined | SunoMedia[]
    if (!obj)
      return []
    return obj
  }
}
